#include "myQueue.h"

// 初始化队列
void queue_init(Queue *q, int capacity) {
    q->front = q->rear = NULL;
    q->size = 0;
    q->capacity = capacity;
}

// 检查队列是否为空
bool queue_is_empty(Queue *q) {
    return q->size == 0;
}

// 检查队列是否已满（如果设置了容量）
bool queue_is_full(Queue *q) {
    return q->capacity > 0 && q->size >= q->capacity;
}

// 入队：新节点加入尾部
bool enqueue(Queue *q, QueueNode *new_node) {
   // if (queue_is_full(q)) {
  //      DEBUG("Queue is full!\n");
   //     return false;
   // }

    // 如果队列为空，新节点既是队头也是队尾
    if (queue_is_empty(q)) {
        q->front = q->rear = new_node;
    } else {
        q->rear->next = new_node; // 将新节点链接到队尾
        q->rear = new_node;       // 更新队尾指针
    }
	
	//加入头部
	//new_node->next = q->front;
	//q->front = new_node;

    q->size++;
    return true;
}


// 入队：新节点 加入头部
bool enqueue_head(Queue *q, QueueNode *new_node) {
    // 如果队列为空，新节点既是队头也是队尾
    if (queue_is_empty(q)) {
        q->front = q->rear = new_node;
    } else {
		new_node->next = q->front;
		q->front = new_node;
    }
	
	//加入头部
	//new_node->next = q->front;
	//q->front = new_node;

    q->size++;
    return true;
}


// 出队：从队列中取出buf指针
QueueNode *dequeue(Queue *q) {
    if (queue_is_empty(q)) {
        // DEBUG("Queue is empty!\n");
        return NULL;
    }

    QueueNode *temp = q->front; // 保存队头节点
    //char *buf = temp->buf;      // 获取buf指针

    q->front = q->front->next;  // 更新队头指针
    if (q->front == NULL) {
        q->rear = NULL; // 如果队列为空，队尾指针也置为NULL
    }

    //free(temp); // 释放队头节点内存
    q->size--;

    return temp;
}

// 释放队列内存（但不释放buf指针指向的内存）
void queue_free(Queue *q) {
	QueueNode *node;
    while (!queue_is_empty(q)) {
        node = dequeue(q); // 出队并释放节点
        free(node->buf);
		free(node);
    }
}

// 打印队列内容（用于调试）
void queue_print(Queue *q) {
    DEBUG("Queue contents (size=%d):\n", q->size);
    QueueNode *current = q->front;
    while (current != NULL) {
        current = current->next;
    }
}

